package com.example.lettcode._202412._20241218;

import java.util.ArrayList;
import java.util.List;

/*
482. 密钥格式化
给定一个许可密钥字符串 s，仅由字母、数字字符和破折号组成。字符串由 n 个破折号分成 n + 1 组。你也会得到一个整数 k 。
我们想要重新格式化字符串 s，使每一组包含 k 个字符，除了第一组，它可以比 k 短，但仍然必须包含至少一个字符。此外，两组之间必须插入破折号，并且应该将所有小写字母转换为大写字母。
返回 重新格式化的许可密钥 。

示例 1：
输入：S = "5F3Z-2e-9-w", k = 4
输出："5F3Z-2E9W"
解释：字符串 S 被分成了两个部分，每部分 4 个字符；
     注意，两个额外的破折号需要删掉。

示例 2：
输入：S = "2-5g-3-J", k = 2
输出："2-5G-3J"
解释：字符串 S 被分成了 3 个部分，按照前面的规则描述，第一部分的字符可以少于给定的数量，其余部分皆为 2 个字符。

提示:
1 <= s.length <= 105
s 只包含字母、数字和破折号 '-'.
1 <= k <= 104
 */
public class _482_mi_yao_ge_shi_hua {

    public static void main(String[] args) {
        String s = "2-5g-3-J";
        int k = 2;
        System.out.println(licenseKeyFormatting3(s, k));
    }

    public static String licenseKeyFormatting(String s, int k) {
        s = s.toUpperCase().replace("-", "");
        char[] chars = s.toCharArray();
        int n = chars.length;
        String temp = "";
        String ret = "";
        for (int i = n-1 ; i >= 0 ; i--) {
            if (chars[i] == '-') {
                continue;
            }
            temp = chars[i] + temp;
            if (temp.length() == k) {
                ret = temp + ret;
                if (i != 0) {
                    ret = "-" + ret;
                }
                temp = "";
            }

            if (i == 0 && temp.length() != k) {
                ret = temp + ret;
            }
        }
        return ret;
    }

    public static String licenseKeyFormatting2(String s, int k) {
        s = s.toUpperCase().replace("-", "");
        if (s.length() == 0) {
            return "";
        }
        int first = s.length() % k == 0 ? k : s.length() % k;
        char[] chars = s.toCharArray();
        String ret = s.substring(0, first);
        String temp = "";
        for (int i = first; i < chars.length; i++) {
            temp = temp + chars[i];
            if (temp.length() == k) {
                ret += "-" + temp;
                temp = "";
            }
        }
        ret += temp != "" ? "-" + temp : "";
        return ret;
    }


    public static String licenseKeyFormatting3(String s, int k) {
        StringBuilder builder = new StringBuilder();

        int cnt = 0;
        for (int i = s.length() - 1; i >= 0 ; i--) {
            if (s.charAt(i) != '-' ) {
                cnt++;
                builder.append(Character.toUpperCase(s.charAt(i)));
                if (cnt % k == 0) {
                    builder.append("-");
                }
            }
        }

        if (builder.length() > 0 && builder.charAt(builder.length()-1) == '-') {
            builder.deleteCharAt(builder.length()-1);
        }
        return builder.reverse().toString().toUpperCase();
    }

    }
